『J
avaFXの基本構造』では、JavaFXがStage, Scene, SceneGraphの3つのクラスで構成されていることを確認した。本記事では、Stageパッケージに属するクラスを見ていく。Sceneパッケージ、SceneGraphパッケージについては別記事で扱う。
■ Stageパッケージに属するクラス
JavaDocを見る限り、Stageパッケージに属するクラスは意外と少ない模様。(
参照2)
以下に主要なクラスの一覧を示す。
クラス名 |
内容 |
Stage |
ウィンドウを表すクラス。複数ウィンドウやモーダル・ウィンドウ、全画面表示にも対応 |
Popup |
ポップアップ・ウィンドウを表すクラス。親ウィンドウが必要。 |
Screen |
ディスプレイを表すクラス。 |
FileChooser |
ファイル選択ダイアログ。ダイアログ呼出は同期メソッド |
DirectoryChooser |
ディレクトリ選択ダイアログ。ダイアログ呼出は同期メソッド |
以下、Stageクラスの使い方サンプル。
package application_fx;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import javafx.application.Application;
import javafx.geometry.Rectangle2D;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.paint.Color;
import javafx.stage.DirectoryChooser;
import javafx.stage.FileChooser;
import javafx.stage.FileChooser.ExtensionFilter;
import javafx.stage.Screen;
import javafx.stage.Stage;
public class TestStage extends Application {
@Override
public void start(Stage mainStage) throws Exception
{
// 一時変数の宣言
List<String> output = new ArrayList<String>(); // 画面出力用バッファ
Rectangle2D primaryScreenBounds = null; // ディスプレイサイズ
File f = null; // 選択したファイルorディレクトリ情報
String str = null; // 一時変数
// ファイル選択ダイアログを表示し、選択したファイルパスを取得
FileChooser fc = new FileChooser();
fc.setTitle( "ファイル選択ダイアログ" );
fc.getExtensionFilters().addAll( new ExtensionFilter( "All Files", "*.*" ),
new ExtensionFilter( "Text Files", "*.txt" ),
new ExtensionFilter( "Image Files", "*.png", "*.jpg", "*.gif" ),
new ExtensionFilter( "Audio Files", "*.wav", "*.mp3", "*.aac" )
);
f = fc.showOpenDialog(mainStage);
str = ( f == null )? "選択なし" : f.toURI().toString() ;
output.add( "選択したファイル名 : " + str );
// ディレクトリ選択ダイアログを表示し、選択したファイルパスを取得
DirectoryChooser dc = new DirectoryChooser();
dc.setTitle("ディレクトリ選択ダイアログ");
f = dc.showDialog(mainStage);
str = ( f == null )? "選択なし" : f.toURI().toString();
output.add( "選択したディレクトリ : " + str );
// ディスプレイサイズを取得
primaryScreenBounds = Screen.getPrimary().getVisualBounds();
output.add( "ディスプレイサイズ:" + primaryScreenBounds.getWidth() + "x" + primaryScreenBounds.getHeight() + "(px)" );
output.add( "ディスプレイ解像度:" + Screen.getPrimary().getDpi() + "dpi" );
// シーングラフを作成
Group root = new Group();
root.getChildren().add( new Label( String.join( "\n" , output ) ) );
// シーンを作成
Scene scene = new Scene( root,
primaryScreenBounds.getWidth(),
primaryScreenBounds.getHeight(),
Color.WHITE );
// シーンをステージに追加
mainStage.setScene( scene );
// ウィンドウを表示
mainStage.show();
// 全画面表示
mainStage.setFullScreen(true);
}
public static void main(String[] args)
{
launch(args);
}
}
実行結果
以下、ソースコードの解説。
- (22行目) start関数の引数として渡されるStage型のインスタンスが渡されているが、これはlauch関数実行により自動生成されたもの。このため、複数のウィンドウを利用したい場合を除き、プログラマがStage型のインスタンスを作成する必要はない。
- (30行目~40行目) ファイル選択ダイアログを利用する例。ExtensionFilterクラスでダイアログに表示するファイルの拡張子を制限できる。showOpenDialog関数はダイアログを開き、処理が終わるまで待つ同期メソッドになっている。ファイルが選ばれなかった場合はnullがかえる。
- (43行目~48行目) ディレクトリ選択ダイアログを利用する例。ファイル選択ダイアログとほぼ同じ。
- (51行目~55行目) ディスプレイ情報を取得する例。
- (56行目~72行目) 出力文字をラベルに貼り付け、ウィンドウ表示。
- (75行目) 全画面表示を有効に変更
■ 参照
- Java Platform, Standard Edition (Java SE) 8 - チュートリアル(日本語)
- JavaDoc - パッケージjavafx.stageの階層
- JavaDoc - クラスStage
※Oracleのドキュメントについての注意。
英語版ページの場合、以下のようにURLを変更すると同内容の日本語版ページが存在する場合がある。日本語版ページのリンク先が英語版ページのままになっている場合もあるため、英語版ページに飛んだ場合には一度試してみるとよい。
英語版ページ 『http://docs.oracle.com/javase/8/~』
日本語版ページ『http://docs.oracle.com/javase/jp/8/~』